import { MenuItem, flatMenu } from "@/types";

export function transformToTree(items: flatMenu[]): MenuItem[] {
  const arr = items.map((item) => {
    return {
      label: item.name,
      pid: item.pid.toString(),
      key: item.id.toString(),
      url: item.url,
    };
  });

  const itemMap = new Map<string | number, MenuItem>();
  const result: MenuItem[] = [];

  // 第一次遍历初始化 Map
  for (const item of arr) {
    if (item.key) {
      itemMap.set(item.key, item);
    }
  }

  // 第二次遍历构建树形结构
  for (const item of arr) {
    if (item.pid && itemMap.has(item.pid)) {
      const parentItem = itemMap.get(item.pid);
      if (parentItem) {
        // 添加空值检查
        if (!parentItem.children) {
          parentItem.children = [];
        }
        parentItem.children.push(item);
      }
    } else {
      result.push(item);
    }
  }

  return result;
}
